Function.prototype.myCall = function (context, ...args) {
  // 如果这个函数处于非严格模式下，则指定为 null 或 undefined 时会自动替换为指向全局对象，原始值会被包装。
  // 原始值包装会在 context[fn] = this; 这一步隐式转换
  // const contextType = typeof context;
  // if (
  //   contextType !== "undefined" &&
  //   contextType !== "object" &&
  //   contextType !== "function"
  // ) {
  //   context = Object(context);
  // }
  context = context || window;

  const fn = Symbol();
  context[fn] = this;

  const result = context[fn](...args);
  delete context[fn];
  
  return result;
};
